import time

user_list = [["张三", "123456", "158811111111", 0, ""],
             ["李四", "123456", "15882222222", 0, ""],
             ["王五", "123456", "15883333333", 0, ""],
             ["luoj", "123456", "15883333333", 10, ""]]

login_userindex = -1  # 用户的下标
max_pw = 3  # 账号密码最大尝试次数


def find_user_index(userName):
    """
    查询用户名的下标，查询不到是 -1
    :param userName: 用户名
    :return: 用户的下标值,查询不到是 -1
    """
    for index, user in enumerate(user_list):
        if user[0] == userName:
            return index
    else:  # 如果没有遇到break都会执行！
        return -1


def query():
    """print用户余额，然后返回！"""
    print(f"你的余额是{user_list[login_userindex][3]}")
    # 回到主菜单
    main_menu()


def withdraw():
    """
    取款: 判断余额不足
    记录日志
    执行完后返回
    """
    draw_money = int(input("请输入你的取款金额："))
    if draw_money > user_list[login_userindex][3]:
        print("余额不足！")
        main_menu()  # 直接回主菜单。
    else:
        user_list[login_userindex][3] -= draw_money
        print("取款成功")
        history_write(user_index=login_userindex,logs=f"{time.strftime('%Y-%m-%d %H:%M:%S')}: 取出{draw_money} 元！")
        query()  # 打印一下余额 , 调用完了后会自动回到主菜单。


def deposite():
    """
    存款：判断不能是负数
    记录日志
    执行完成后返回
    """
    deposite_money = int(input("请输入要存的金额:"))
    if deposite_money < 0:
        print("输入的存入金额错误！")
        main_menu()  # 回到主菜单
    else:
        user_list[login_userindex][3] += deposite_money
        print("存入成功！")
        history_write(user_index=login_userindex,logs=f"{time.strftime('%Y-%m-%d %H:%M:%S')}: 存入{deposite_money} 元！")
        query()  # 打印余额 并返回主界面。


def transer():
    """
    转账：判断 转账人是否存在， 余额是否足够。
    记录日志：两个人都需要记录。
    执行完成后返回
    """
    transer_username = input("请输入转给谁：")
    # 判断是否存在
    transer_username_index = find_user_index(transer_username)
    if transer_username_index == -1:
        print("收款人不存在！")
        # main_menu() # 回到主菜单
    else:
        # 转钱
        transer_money = int(input("请输入转的金额："))   # 必须是数字格式，才能比较大小。
        if transer_money > user_list[login_userindex][3]:
            print("余额不足！")

        else:
            user_list[login_userindex][3] -= transer_money   # 先减自己的钱
            history_write(user_index=login_userindex,logs=f"{time.strftime('%Y-%m-%d %H:%M:%S')}: 转给{transer_username} {transer_money} 元！")
            user_list[transer_username_index][3] += transer_money  # 给对方加钱
            history_write(user_index=transer_username_index,
                          logs=f"{time.strftime('%Y-%m-%d %H:%M:%S')}: {user_list[login_userindex][0]} 转给我 {transer_money} 元！")
            print(f"成功给{transer_username} 转了 {transer_money}")
            print(f"余额是{user_list[login_userindex][3]}")

    main_menu()  # 回到主菜单


# def history_write(user_index=login_userindex, logs=""):  # 默认给自己写日志
def history_write(user_index=login_userindex, logs=""):  # 默认给自己写日志
    """
    流水：字符串记录，用\n分割
    """
    u=user_index
    user_list[user_index][4] += logs + "\n"   # 待会在打印print日志的时候，遇到\n 会自动换行


def history_read():
    """打印流水"""
    print(user_list[login_userindex][4])
    main_menu()  # 打印完了回到主菜单


def star_meun():
    """
    开始菜单
    :return: None
    """
    print("欢迎来到WoniuATM".center(83, "*"))
    print("请选择操作菜单".center(81, "*"))
    print("1.注册  2.登录  3.退卡".center(83, "*"))
    option = input("请输入你的操作选项：")
    if option == "1":
        reg()  # 注册功能
    elif option == "2":
        login()  # 登录功能
    elif option == "3":
        exit("谢谢,欢迎下次光临。")  # 结束程序运行，括号中的内容是，结束时的提示符。
    else:
        print("指令错误，重新选择。")
        star_meun()


def main_menu():
    """
    登录成功后的菜单
    :return: None
    """
    print("请选择操作菜单".center(81, "*"))
    print("1.查询 2.取款 3.存款 4.转账 5.流水 6.返回 7.退卡".center(75, "*"))
    option = input("请输入你的操作选项：")
    if option == "1":
        query()
    elif option == "2":
        withdraw()
    elif option == "3":
        deposite()
    elif option == "4":
        transer()
    elif option == "5":
        history_read()
    elif option == "6":
        star_meun()
    elif option == "7":
        exit("再见，欢迎下次光临。")
    else:
        print("你输入的选项有误，请重新选择！")
        main_menu()


def reg():
    """
    注册菜单： 判断是否存在用户名。
    不存在则可以添加用户名。
    """
    new_username = input("请输入你的用户名：")
    if find_user_index(new_username) == -1:
        new_passwd = input("请输入你的密码:")
        new_phone = input("请输入你的电话号码:")
        new_user_info = [new_username, new_passwd, new_phone, 0, ""]
        user_list.append(new_user_info)
        print("恭喜你注册成功！")
        # 注册完成后业务要继续
        star_meun()
    else:
        print("用户名已存在，请重新输入。")
        reg()  # 重新注册


def login():
    """
    登录: 最大三次机会，
    """
    try_times = max_pw  # 3

    while try_times > 0:
        try_times -= 1  # 每循环一次，减1次
        login_user = input("请输入登录用户名：")
        login_pw = input("请输入登录密码：")
        # 判断用户名和密码是否正确。

        for index, user in enumerate(user_list):
            if user[0] == login_user and user[1] == login_pw:
                print("登录成功")
                global login_userindex
                login_userindex = index  #   记录当前登录用的下标，否则后面的查询，取款，不知道我是谁。
                main_menu()  # 登录成功后进入主菜单
        else:
            # 重新输入
            # 提示还剩余几次
            print(f"账号密码输入错误，还剩{try_times}次！")

    print("登录超过限制！")
    # 超过限制就回到主菜单
    star_meun()  # 主菜单


star_meun()
